/* created by zhanglin on Mar 28, 2016 */
/*
 *  描述：[input]格式化插件 需要Jquery支持
 *  效果：限制输入框的输入有效值
 *  用法：$(选择器).popFormat(options); options = {type:"",minValue:"",maxValue:"",fixedNumber:""}
 *             type ： 支持 number（正整数），string（随意），double（浮点），double-minus（负数浮点型）,date(日期型2014-09-12)
 *             minValue：最小值
 *             maxValue：最大值
 *             fixedNumber：保留位数
 *  作者：POP产品研发组 张琳
 *  日期：Mar 28, 2016
 */
$.fn.popFormat = function(options) {
	var defaults = {
			type : "string",// number,double,double-minus,date
			maxValue:undefined,
			minValue:undefined,
			fixedNumber:undefined
	};

	var _settings = $.extend({},defaults,options);
	var _g = this;
	var _type = _settings.type;
	var _maxValue= _settings.maxValue;
	var _minValue= _settings.minValue;
	var _fixedNumber = _settings.fixedNumber;
	var _method = {
			popString:function(_this){
		
			},
			popNumber:function(_this){
				// 首字母不能为0
				$(_this).val($(_this).val().replace(/^0*/g,""));
				// 去掉非数字
				$(_this).val($(_this).val().replace(/[^0-9]*/g,""));
				// 取值范围
				_method.valueLimit(_this);
			},
			popNumber2:function(_this){
				// 去掉非数字
				$(_this).val($(_this).val().replace(/[^0-9]*/g,""));
				// 取值范围
				_method.valueLimit(_this);
			},
			popDouble:function(_this){
				// 第一个不能为小数点 0后一定有小数点
				$(_this).val($(_this).val().replace(/^[\.]/,""));
				$(_this).val($(_this).val().replace(/^0{1,}/,"0"));
				// 去掉非数字
				$(_this).val($(_this).val().replace(/[^0-9\.]*/g,""));
				// 去掉多余的小数点
				$(_this).val($(_this).val().replace(".", "$#$").replace(/\./g, "").replace("$#$", "."));
				// 第一个不能为小数点 
				$(_this).val($(_this).val().replace(/^[\.]/,""));
				// 取值范围
				_method.valueLimit(_this);
				// 最多保留位数
				var p = $(_this).val().indexOf(".");
				if(p != -1 && _fixedNumber != undefined){$(_this).val($(_this).val().substring(0,p+1+_fixedNumber));}
			},
			popDouble2:function(_this){
				// 第一个不能为小数点 0后一定有小数点
				$(_this).val($(_this).val().replace(/^[\.]/,""));
				$(_this).val($(_this).val().replace(/^0{1,}/,"0"));
				// 去掉非数字
				$(_this).val($(_this).val().replace(/[^0-9\.]*/g,""));
				// 去掉多余的小数点
				$(_this).val($(_this).val().replace(".", "$#$").replace(/\./g, "").replace("$#$", "."));
				// 第一个不能为小数点 
				$(_this).val($(_this).val().replace(/^[\.]/,""));
				// 取值范围
				_method.valueLimit(_this);
				// 最多保留位数
				var p = $(_this).val().indexOf(".");
				if(p != -1 && _fixedNumber != undefined){$(_this).val($(_this).val().substring(0,p+1+_fixedNumber));}
			},
			popDoubleMinus:function(_this){
				// 第一个不能为小数点 0后一定有小数点
				$(_this).val($(_this).val().replace(/^[\.]/,""));
				$(_this).val($(_this).val().replace(/^0{1,}/,"0"));
				// 去掉非数字
				$(_this).val($(_this).val().replace(/[^0-9\.\-]*/g,""));
				// 去掉多余的小数点
				$(_this).val($(_this).val().replace(".", "$#$").replace(/\./g, "").replace("$#$", "."));
				// 去掉多余的 -
				$(_this).val($(_this).val().replace("-", "$#$").replace(/\-/g, "").replace("$#$", "-"));
				// 第一个不能为小数点 
				$(_this).val($(_this).val().replace(/^[\.]/,""));
				// 取值范围
				_method.valueLimit(_this);
				// 最多保留位数
				var p = $(_this).val().indexOf(".");
				if(p != -1 && _fixedNumber != undefined){$(_this).val($(_this).val().substring(0,p+1+_fixedNumber));}
			},
			valueLimit:function(_this)
			{
				// 如果有最大值判断是否超出最大值
				if(_maxValue != undefined && _maxValue < $(_this).val()){$(_this).val(_maxValue);}
				// 如果有最大值判断是否超出最小值
				if(_minValue != undefined && _minValue > $(_this).val()){$(_this).val(_minValue);}
			},
			popDate:function(_this)
			{
				//var reg_1 = /^[1-9]\d{3}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])$/;
				
				// 去掉非数字
				$(_this).val($(_this).val().replace(/[^0-9\-]*/g,""));
				var content = $(_this).val();
				
				var reg_1 = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/;

				if(content.length > 0){
					var regExp_1 = new RegExp(reg_1);
					if(!regExp_1.test(content)){
						$(_this).val("");
						//alert("您输入的时间格式不正确,格式2017-09-08！");
					}
				}
			},
			popDate_keyup:function(_this)
			{
				// 去掉非数字
				$(_this).val($(_this).val().replace(/[^0-9\-]*/g,""));
			}
	};

	// 禁用输入法
	if(_type!="string"){$(_g).css("imeMode","disabled");}
	
	this.each(function(){
		$(this).on("keyup",function(){
			if(_type!=""&&_type!=undefined&&_type!=null)
			{
				if(_type=="string"){_method.popString($(this));}
				if(_type=="number"){_method.popNumber($(this));}
				if(_type=="number2"){_method.popNumber2($(this));}
				if(_type=="double"){_method.popDouble($(this));}
				if(_type=="double2"){_method.popDouble2($(this));}
				if(_type=="double-minus"){_method.popDoubleMinus($(this));}
				if(_type=="date"){_method.popDate_keyup($(this));}//只能输入数据和"-"
			}
		});
	});

	this.each(function(){
		$(this).on("change",function(){
			if(_type!=undefined){if(_type!="string" && _type!="date"){if($(this).val()=="-"){$(this).val("");}}}
			$(this).trigger("keyup");
		});
	});

	return this.each(function(){
		$(this).on("blur",function(){
			if(_type!=undefined)
			{
				if(_type!="string" && _type!="date")
				{
					if($.trim($(this).val())!= "" && $(this).val() != null && $(this).val() != undefined)
					{
						$(this).val(parseFloat($(this).val()).toFixed(_fixedNumber));
						if($(this).val()==0){$(this).val("");}
						if($(this).val()==NaN || $(this).val()=="NaN"){$(this).val("");}
					}
				}
				if(_type=="date"){_method.popDate($(this));}
			}
		});
	});
}